
  /*
  1. Promise 是一个类 在执行这个类的时候 需要传递一个执行器进去 执行器会立即执行
  2.Promise 中有三种状态 分别为 成功 fulfilled 失败 rejected 等待 pending
    pending -> fulfilled
    pending -> rejected
  3.reslove和reject函数是用来更改状态的
    resolve：fulfilled
    reject： rejected
  4.then方法内部做的事情就是判断状态 如果状态是成功 调用成功的回调函数 如果状态是失败 调用失败回调函数 then方法是被定义在原型对象上的
  5.then成功回调有一个参数 表示成功后的值 then失败回调有一个参数 表示失败后的原因
  */ 
  const MyPromise = require('../code/myPromise')

const { resolve } = require("../code/myPromise")
const { reject } = require("lodash")

  // let promise = new MyPromise((resolve, reject) => {
  //   // setTimeout(() => {
  //   //   resolve('成功...')
  //   // }, 2000)
  //   // throw new Error('excutor error')
  //   resolve('成功')
  //   // reject('失败')
  // })

  // function other () {
  //   return new MyPromise((resolve, reject) => {
      
  //     resolve('other')
  //   })
  // }

  // promise.then().then().then(res => console.log(res))

  function p1 () {
    return new MyPromise(function (resolve, reject) {
      setTimeout(function () {
        resolve('p1')
      }, 2000)
    })
  }

  function p2 () {
    return new MyPromise(function (resolve, reject) {
      reject('失败')
      // resolve('成功')
    })
  }

  // MyPromise.all(['a', 'b', p1(), p2(), 'c']).then(result => console.log(result))
  // MyPromise.resolve(100).then(value => console.log(value))
  // MyPromise.resolve(p1()).then(value => console.log(value))
  
  
  // p1.then(value => {
  //   console.log(value)
  // }, reason => {
  //   console.log(reason.message)
  // })

  // promise.then(value => {
  //   console.log(2)
  //   console.log(value)
  // }, reason => {
  //   console.log(reason)
  // })

  // promise.then(value => {
  //   console.log(3)
  //   console.log(value)
  // }, reason => {
  //   console.log(reason)
  // })

  p2().then(value => {
    console.log(value)
  }).catch(reason => console.log(reason))


// new Promise(function (resolve, reject) {
//   console.log('AAAA')
//   resolve()
// }).then(function () {
//   new Promise(function (resolve, reject) {
//     console.log('BBBB')
//     resolve()
//   }).then(function () {
//     console.log('CCCC')
//   }).then(function () {
//     new Promise(function (resolve, reject) {
//       console.log('DDDD')
//       resolve()
//     }).then(function () {
//       console.log('EEEE')
//     }).then(function () {
//       console.log('FFFF')  
//     })
//     console.log('GGGG')
//   })
//   console.log('HHHH')
// }).then(function () {
//   console.log('IIII')
// })

// new Promise(function (resolve, reject) {
//   console.log('JJJJ')
//   resolve()
// }).then(function () {
//   console.log('KKKK')
// }).then(function () {
//   console.log('LLLL')
// })

// let ps = new Promise((resolve, reject) => {
//   resolve(1)
// })
// console.log(ps.then().then())